Este módulo pasa de caminos estáticos a herramientas dinámicas basadas en eventos manipulando el CanvasRenderingContext2D estado. Nos enfocamos en ampliar las capacidades de la aplicación mediante patrones de orden superior y filtrado matemático.
1. Patrones de Herramientas de Orden Superior
Herramientas como tools.Line abstraen eventos del ratón usando ayudantes como trackDrag. Por el contrario, tools.Spray implementa repetición basada en intervalos mediante setInterval, permitiendo la colocación continua de píxeles mientras se mantiene presionado el botón del ratón.
2. Restricciones Matemáticas
Un desplazamiento aleatorio simple crea una distribución cuadrada. Para lograr un efecto natural de pincel circular, usamos el teorema de Pitágoras para filtrar puntos: $x^2 + y^2 < r^2$. Alternativamente, se podría usar coordenadas polares con Math.sin y Math.cos para la conversión.
3. Operaciones Compuestas y Estado
Más allá de los trazos estándar, la propiedad globalCompositeOperation define cómo interactúan los nuevos píxeles con los existentes. Por ejemplo, establecerlo en 'destination-out' permite que la función tools.Erase convierta los píxeles en transparentes en lugar de simplemente pintarlos de blanco. Controles de interfaz como controls.color y controls.brushSize proporcionan actualizaciones en tiempo real a fillStyle y lineWidth respectivamente.
lineCap controla la forma de los extremos de los trazos, esencial para dibujar suavemente.